package com.z.redis.command.impl.set;

import com.z.redis.RedisCore;
import com.z.redis.command.CommandType;
import com.z.redis.command.impl.AbstractScan;
import com.z.redis.datatype.BytesWrapper;
import com.z.redis.datatype.RedisSet;
import com.z.redis.resp.BulkString;
import com.z.redis.resp.Resp;
import com.z.redis.resp.RespArray;

import java.util.List;
import java.util.stream.Collectors;


/**
 * 获取集合内的所有元素
 * 根据条件匹配符合条件的元素
 * TODO
 */
public class Sscan extends AbstractScan {
    private BytesWrapper key;

    @Override
    public CommandType type(){
        return CommandType.sscan;
    }

    @Override
    public void setContent(Resp[] array){
        key = ((BulkString) array[1]).getContent();
    }

    public RespArray get(RedisCore redisCore){
        RedisSet redisSet = (RedisSet) redisCore.get(key); // 获取集合对象
        // 遍历所有元素
        List<BulkString> collect = redisSet.smembers().stream().map(keyName -> new BulkString(keyName)).collect(Collectors.toList());
        return new RespArray(collect.toArray(new Resp[collect.size()]));
    }
}
